#include "musicslider.h"
#include "ui_musicslider.h"
#include <QMouseEvent>
#include <QDebug>

MusicSlider::MusicSlider(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MusicSlider)
{
    ui->setupUi(this);
    //初始化进度条总宽度。进度条总宽度就是当前窗口的总宽度
    maxWidth=this->width();

    //初始化当前播放进度
    currentPos=0;
    //更新进度条的宽度为当前播放进度
    moveSlider();
}

MusicSlider::~MusicSlider()
{
    delete ui;
}
//实现当前播放时间和进度条同步增长
void MusicSlider::setStep(float ratio)
{
    //更新当前播放进度
    currentPos=maxWidth*ratio;
    //更新进度条的宽度为当前播放进度
    moveSlider();
}
//重写鼠标按下事件的事件处理函数
void MusicSlider::mousePressEvent(QMouseEvent *event)
{
    //更新当前播放进度
    currentPos=event->pos().x();
    //更新进度条的宽度为当前播放进度
    moveSlider();
}
//重写鼠标移动事件的事件处理函数
void MusicSlider::mouseMoveEvent(QMouseEvent *event)
{
    //鼠标移动的时候，event->pos()鼠标位置必须在这个进度条控件的窗口内才能支持拖拽功能
    //检测：event->pos()鼠标位置是否在MusicSlider的窗口矩形范围内
    QRect musicSliderRect = QRect(0,0,geometry().width(),geometry().height());
    if(musicSliderRect.contains(event->pos())==false)
    {
        //鼠标当前位置已经超出了此进度条控件范围内，不支持拖拽功能了。
        qDebug()<<musicSliderRect<<"-"<<event->pos();
        return;
    }
    //鼠标移动事件的前提是鼠标左键点击
    if(event->buttons()==Qt::LeftButton)
    {
        //更新当前播放进度
        currentPos=event->pos().x();
        //处理边界情况
        if(currentPos<0)
        {
            currentPos=0;
        }
        if(currentPos>maxWidth)
        {
            currentPos=maxWidth;
        }
        //更新进度条的宽度为当前播放进度
        moveSlider();
    }
}
//重写鼠标释放事件的事件处理函数
void MusicSlider::mouseReleaseEvent(QMouseEvent *event)
{
    //更新当前播放进度
    currentPos=event->pos().x();
    //更新进度条的宽度为当前播放进度
    moveSlider();
    //根据播放进度来更新进度条的进度
    emit setMusicSliderPosition(ui->outLine->width()/(float)maxWidth);
}
//更新进度条的宽度为当前播放进度
void MusicSlider::moveSlider()
{
    ui->outLine->setGeometry(ui->outLine->x(),ui->outLine->y(),currentPos,ui->outLine->height());
}
